//
// Created by 28365 on 2025/3/5.
//

#ifndef ODUPDATERSDK_IUPDATERSERVER_H
#define ODUPDATERSDK_IUPDATERSERVER_H

class IUpdaterServer;

#include "../include/config/server_api/result_obj/ReqValue.h"
#include "../include/obj/Res.h"
#include "../include/ODUpdater.h"
#include "../include/config/server_api/result_obj/data/ValueData.h"


class IUpdaterServer {
public:

    /**
     * 获取并发下载数量
     * @param odUpdater 更新器实例
     * @return 并发下载数量
     */
    virtual ReqValue<ValueData> getConcurrencyCount(const ODUpdater &odUpdater) = 0;

    /**
     * 获取资源文件，并更新传输文件数据
     * <p>此方法将产生阻塞，直到返回结果</p>
     * @param res 资源
     * @param outStream 文件输出流
     * @param odUpdater 更新器实例
     * @return 请求状态对象
     */
    virtual ReqValue<string> getResFile(const Res &res,int version,ofstream *outStream,const ODUpdater& odUpdater) = 0;

    /**
     * 获取客户端版本到最新版之间的所有版本
     * @param version
     * @param labelId
     * @param unpublishKey
     * @param odUpdater
     * @return 响应对象
     */
    virtual ReqValue<vector<int>> getVersions(int nowVersion, int unpublishKey,const ODUpdater &odUpdater) = 0;

    /**
     * 获取版本的所有资源
     * @param version 版本号
     * @param labelId 资源id
     * @param unpublishKey 未发布密钥，没有则传入0
     * @param odUpdater 更新器实例
     * @return 响应对象
     */
    virtual ReqValue<vector<Res>> getVersionRes(int version,int64_t  labelId, int unpublishKey,const ODUpdater &odUpdater) = 0;

    /**
     * 获取未发布版本
     * @param unpublishKey 未发布密钥
     * @param odUpdater 更新器实例
     * @return 没有则返回0
     */
    virtual ReqValue<int> getUnpublishedVersion(int unpublishKey,const ODUpdater &odUpdater) = 0;

    virtual ~IUpdaterServer() = default;

};

#endif //ODUPDATERSDK_IUPDATERSERVER_H
